The internal device EANPOS is a tool that resides in the CPU that allows to manage the movement of a mechanical axis with a trapezoidal ramps with analog to trapezoidal or “S” ramp.
The main function of the device is to generate a trajectory or “speed profile” that, suitably converted into a proportional voltage signal, He commands a driving and then the axis attached to it, to bring it to the desired position.
The device also includes a feed-back process on the measurement taken from the transducer. This measure appropriately compared is used to generate the feedback.
The control voltage for operation is generated by a DAC hardware (Digital to Analogic Converter) present on the BUS QMOVE.
To sync the device with the actual axis position returned by, is there a special procedure for handling called “searching for presets”.
The feed-back is of PID+FF type (proportional, integral, derivative and feed-forward).

In the configuration file (.CNF), the BUS section must be declared so that you have the hardware resources required for the implementation of the EANPOS device. There must be at least a bi-directional counter and a 16-bit resolution analog output. The device can also be used with an input and an interrupt line for preset search functions.
In the INTDEVICE section of the .CNF file tmust be add the following definition:
;--------------------------------- ; Internal device declaration ;--------------------------------- INTDEVICE .. <device_name> EANPOS TCamp ICont IntL IAZero IoutA
where:
| <device name> | The name assigned to the device |
| EANPOS | Keyword that identifies the analog positioner device |
| TCamp | Sample time device (1÷255 ms) |
| ICont | Bidirectional counter input (to prevent the device uses this resource enter the characters X.X) |
| IntL | Number of the interrupt line dedicated to the encoder zero pulse during the research phase of presets. Allowed values: 1÷8 (to prevent the device uses this resource, enter the character X) |
| IAZero | Enable input for transducer zero pulse acquisition during the research phase of presets (to prevent the device uses this resource enter the characters X.X) |
| IOutA | Hardware address of the DAC from analog output (to prevent the device uses this resource enter the characters X.X) |
N.B. It is necessary that each definition are present on the same line. In case you do not want to assign a resource, for example IAZero, you must enter in the appropriate field the string X.X.
;--------------------------------- ; Internal device declaration ;--------------------------------- INTDEVICE Axis_X EANPOS 2 2.CNT02 3 3.INP01 3.AN01
The EANPOS device cquires the position of via bi-directional transmitter signals; these signals are used by an internal counter. This counter value does not express the position of the axis directly measured in the units that are required by your application. The device does not have within it the cntratio parameter, but let the installer can work with unfinished encoder resolutions by setting the data as space covered in a round encoder (measure) and number of pulses round of encoder (pulse). The relationship between the measure and pulse is the encoder resolution and must have values between 1 and 0.000935.
1) The parameter measure is placed in units without decimal points (for example 100.0 mm is inserted 1000 tenths of a millimeter).
2) The pulse parameter is put into bit encoder x 4 (for example if I connected a 1024 pulses round encoder, is inserted 4096, If the measure is calculated on a round encoder).
If for the selected unit of measure is also provided for the presence of a decimal point, the locations must be represented as an integer and represent space in units without decimal point. The resolution must be calculated with the same formula and measure represent the size without decimal point. The decimal point will then be inserted into the representation of the value-time viewers (example as properties in the terminal operator).
The speeds are always expressed in whole units of measure in the unit of choice time. From this it emerges that the device must know the location of the decimal point of the unit of measure and this is done with the decpt parameter. This parameter can take values 0÷3.
N.B. To activate this device send the INIT command.
You have to control a rotating table that have the accuracy of 0,1° having an encoder from 1024 pulse for rown directly; you will set the following values:
Axis:measure = 3600
Axis:pulse = 4096
Axis:decpt = 1
To execute the positioning at 4.6 degrees you need to enter:
Axis:setpos = 146
To set a speed of 10 degrees degrees per second, you must type:
Axis:unitvel = 1
Axis:setvel = 10
The name of parameter, state or command are shown to the left of the table.
R
Indicates if its parameter os state is retentive (upon initialization of the device maintains the previously defined), or the state assumes upon initialization of the device.
If the device does not need to initialize the field “R” indicates the value that the parameter or state take to the power up of the card.
R = Retentive
0 = Upon initialization of the device the value is forced to zero.
1 = Upon initialization of the device the value is forced to one.
- = Upon initialization of the device is presented significant value.
D
Indicates the size of the parameter.
F = Flag
B = Byte
W = Word
L = Long
S = Single Float
Describes all the conditions necessary so that the parameter is considered correct or because the command is accepted.
In some cases, limit values are specified for the acceptance of the parameter: if are introduced the value outside the limits set, the data is however accepted; therefore appropriate controls of the application must be provided to ensure the proper functioning.
To run a command, all conditions must be met; otherwise the command does not run.
A
Indicates the access mode.
R = Read.
W = Write.
RW = Read / Write.
At the START command, the axis is positioned to the declared quota in the setpos variable with speed set in setvel; the placement will run using the acceleration ramp set in tacc parameter and the deceleration ramp in tdec parameter. The type of used ramp (trapezoidal or epicicloidal) is inserted in the ramptype parameter.
If during placement is necessary to stop the axis with a deceleration ramp, it will simply give the command to STOP and the axis decelerates to a stop with the ramp sets in the tdec parameter.
This command puts the axis in emergency conditions; the st_emrg state is set to one. If the emergency command is sent to the axis during a placement, the movement is interrupted without deceleration ramp, the analog output will be set to zero volts and you dropped the reaction of space. With st_emrg = 1 (emergency condition), you cannot move the axis.
This command will reset the emergency condition; the axis comes in reaction to space and waits for a command to be able to move (does not automatically resume interrupted positioning).
The LOOPOFF command removes the reaction of space without stopping the axis. With st_loopon = 0 the axis handling axis commands accepted, but all placements will be performed without reaction of space.
A placement made reaction without loop is comparable to a positioning run without proportional gain (is not guaranteed to arrive in position).
The LOOPON command closes the space feedback without stopping the axis. With st_loopon = 1 the axis is moved using all the features of the P.I.D. control.
Following is a table summarizing the conditions necessary for the axis in reaction to space and to perform placements.
| Loopon | Emrg | Space reaction | Possibility of movement |
| Yes | No | Yes | Yes |
| Yes | Yes | No | No |
| No | No | No | Yes |
| No | Yes | No | No |
The epicicloidal motion (ramptype = 1) is used to move the axes without sudden variations in speed. The time of positioning of the axis with trapezoidal ramps is less than the same axis moved with the epicicloidal ramps, but the mechanical wear is considerably higher.
For comparison shows the difference of the time of acceleration in the two cases with constant maximum gradient acceleration.
The same goes for the deceleration ramp.
The epicicloidal movement has the ability to behave in different ways in the event of a reduction in profile (rtype) and in the case of stop during acceleration (stopt).
In the event that ramptype = 1. In case the space ahead is less than that which allows to reach the speed set by the acceleration and deceleration ramps, you pass in the phase called “reduction of profile”.
You can remain fixed the ramp time, decreasing gradients of the ramps and the speed in proportion (rtype parameter set to 0).
The profile reduction is used only if you are doing a placement.
You can also decrease the time of the ramps while maintaining the gradient of constant acceleration and decrease speed in proportion (rtype parameter set to 1).
With rtype parameter set to 0 extend considerably the time needed to placements with loss of productivity of the machine, instead of setting it to 1 in case of short placements, shorter times, but keeping the constant gradient you lose the beneficial effect of epicicloidal baseline.
In the event that ramptype = 1 and we should curb the axis during acceleration with the STOP command, You must choose whether to complete the ramp, or if you want to abort the ramp and consequently change the epicicloid.
In case you set the stopt parameter to 0 is first completed the acceleration ramp and then performed the deceleration ramp.
The type of stop during the rumps is only used if you are doing a placement.
In case you set the stopt parameter to 1 stops the acceleration ramp and started immediately the deceleration ramp set.
You immediately notice that there is a substantial difference between the setting of stopt to 0 or to 1. To make the choice of what type of stop use, It should be noted that in case of emergency exists the emergency command that instantly locks and without ramp positioning.
![]() | Before starting the placements you must make sure that electrical connections and mechanical appliances do not cause malfunctions. |
|---|
For axis management, the EANPOS device using an analog output with range ±10 V and resolution 16 bit with sign; with this calibration function with analog output can be driven with a constant value in order to test links and functionality.
The EANPOS device raises the voltage value of the analogue output on the basis of a ratio between the maximum speed of the axis and the maximum output voltage. Proportionality is obtained with the maxvel parameter, that represents the speed of the axis on the analog voltage (10 V). The axle must behave symmetrical behavior respect to zero value of analog output, therefore the speed must be the same on both the positive and negative voltage at maximum.
Before you determine the value of the maximum speed, we must establish the unit of time to use for the representation of the speed in the device; the unitvel parameter defines the unit of time of the speed (Um/min or Um/s).
The theoretical method is a calculation that was performed on the basis of the maximum speed of the motor. Once established the maximum revolutions per minute declared on the motor, we get the maximum speed.
Introduce in the maxvel parameter the value of maximum speed calculated.
The practical approach is based on the reading of the speed detected by the device in the vel variable, giving the drive a known voltage. To provide the voltage to drive the device should be placed in a position of calibration as described in the previous paragraph. If the system permits, supply the 10V voltage to the drive and read the speed value in the vel parameter. If, on the other hand, is an excerpt of the output voltage (1, 2, … 5 V), calculate the maximum speed with the proportion: vout : 10 [V] = vel : maxvel
Enter the maximum speed value found in maxvel parameter.
![]() | Attention! Before to move the axis, check the correct function of emergency and protection devices. |
|---|
The procedures described here have allowed us to complete the first phase of device parameterizing. Now you can run a simple movement of the axis.
This first movement was done without speed feedback space. The placement may have been executed with some error introduced by the non-linearity of the components or by an imperfection in the calibration of the maximum speed. Subsequently enabling feedback space this error goes away.
The runs placement in the preceding paragraph has been made without considering any position errors. To check the correct position of the axis continuously and automatically, You must have a feed-back on the position; for this reason introduces the PID+FF control algorithm including proportional, integral, derivative actions and feed-forward; the value of the analog output is given by the summation of the feed-forward, proportional, integrative e derivative actions.
Without going into the merits of a technical description of the theory of regulation, in this section describes a series of actions to adjust the parameters that affect this control. In order to achieve a satisfactory adjustment is sufficient to use only the feedforward and proportional actions; integral and derivative actions are used only for adjustments under special conditions.
The feed-forward helps make the system more ready on placements, by providing the analog output voltage proportional to the theoretical speed of positioning. In practice it is the component which you performed the placements of the previous chapter.
The contribution of this action can be adjusted with the feedfw parameter; this parameter is expressed as a portion of millesimal theoretical speed; so, to introduce such as 98.5% you must set 985 (thousandths).
This action provides an proportional output to the instantaneous axis position error. The extent of the proportional action is defined by the pgain parameter that defines the sensitivity of the system.
The pgain parameter is introduced in thousandths; the unit value of the gain (1000) provides an analog output to maximum value (10 V) concerning the maximum speed error. For maximum speed error means the space taken by axis - at the maximum speed - for the duration of the sampling time of the device.
Integrates the position error of the system over time set in integt parameter updating the release until the error is not canceled.
The lower the integration time of the error, the faster the recovery system error, but the system can become unstable, tending to swing.
Anticipates the change of the motion of the system tends to eliminate the overshoot of the positioning. The entity of change is calculated over time set in derivt parameter.
More higher is the derivation time and more speed is the system in the transient error recovery, but if you enter a value that is too high the system becomes unstable, tending to fluctuate.
Searching for presets is a procedure to synchronize the count (posit parameter) with the actual position of the axis. Can be performed in 3 different ways according to the prsmode parameter.
Una volta fatta partire la ricerca di preset con il comando PRESET, lasse si dirige verso la posizione dove si attiva
lingresso di abilitazione impulso di zero trasduttore con velocità definita da prsvel. Lo stato st_prson si attiva per segnalare
il preset in corso. Quando, nella sua corsa, lasse attiva quest'ingresso, inverte la direzione e riparte con velocità
sprsvel.
A questo punto il comportamento dipende dal modo di caricamento selezionato (Modo 0 o Modo 1).
Questa procedura prevede la movimentazione dellasse e lutilizzo dellingresso di abilitazione impulso di zero trasduttore.
Alla disattivazione dellingresso abilitazione impulso di zero trasduttore, la quota di preset viene caricata sul conteggio
(parametro posit=prspos).
Successivamente, si disattiva lo stato st_prson e si attiva lo stato st_prsok per segnalare la conclusione della ricerca.
Questo stato rimane attivo fino allavviamento di una nuova procedura di preset; allaccensione del sistema questo stato è
sempre a zero. Vedi figura 1.
| Figura 1: caricamento preset utilizzando la sola camma di abilitazione. |
![]() |
Questa procedura prevede la movimentazione dellasse e lutilizzo degli ingressi impulso di zero ed abilitazione impulso di zero trasduttore.
Alla disattivazione dellingresso abilitazione impulso di zero trasduttore, viene abilitata la lettura del primo impulso di zero
fornito dal trasduttore e, su questo segnale, viene caricata la quota di preset nel conteggio (parametro posit = prspos).
Per permettere il caricamento della quota di preset con Modo 1, la scheda sulla quale è collegato limpulso di zero traduttore
deve trasmettere questo segnale su una delle 8 linee di interrupt hardware. Inoltre il device deve essere stato definito
per utilizzare la stessa linea di interrupt hardware (veri definizione nel file .CNF).
Successivamente, lasse poi si posiziona alla quota di preset, si disattiva lo stato st_prson e si attiva lo stato st_prsok
per segnalare la conclusione della ricerca; questo stato rimane attivo fino allavviamento di una nuova procedura di preset.
Allaccensione del sistema st_prsok è sempre a zero. Vedi figura 2.
| Figura 2: caricamento preset utilizzando camma di abilitazione ed impulso di zero trasduttore. |
![]() |
Questa procedura NON prevede la movimentazione dellasse e lutilizzo dellingresso di abilitazione impulso di zero trasduttore.
Con questa procedura, la ricerca di preset non esegue nessun posizionamento. Il comando di caricamento della quota di preset viene fornito dallattivazione dellingresso di abilitazione zero encoder e lo stato st_prsok viene impostato a uno. Se lingresso rimane attivo il caricamento è continuo mentre, se allaccensione lingresso è già attivo, il primo caricamento viene eseguito solo dopo una sua disattivazione e successiva attivazione.
In alcune applicazioni viene richiesto di posizionare un numero elevato di assi movimentando un singolo asse alla volta.
La scelta progettuale ricade sullinstallazione di un solo azionamento che a seconda dellasse da posizionare si collega
elettricamente al motore interessato al posizionamento; il trasduttore é sempre vincolato al relativo asse.
Il device EANPOS permette di controllare laccesso al dispositivo DAC tramite i comandi REGON e REGOFF. In questo
modo tramite lapplicativo in QCL definisce una serie di device tanti quanti sono gli assi da posizionare; nella definizione,
tutti i device utilizzano la stessa risorsa DAC (IOutA).
Normalmente tutti i device devono essere nello stato st_regoff = 1 in modo da non avere accesso al dispositivo DAC.
Prima di iniziare il posizionamento, con il comando REGON, il device interessato viene portato allo stato di st_regoff = 0.
Viene eseguito il posizionamento e, al suo completamento, il device viene riportato nello stato di st_regoff = 1 con il comando
REGOFF. Per nessun motivo due device si devono trovare contemporaneamente nello stato di st_regoff = 0.
Quando il device è posto nella condizione di regoff, luscita analogica rimane fissa allultimo valore di tensione definito
prima del comando REGOFF.
In alcune applicazioni viene richiesto di definire la quota di destinazione durante il posizionamento, in base ad eventi esterni al device. Questa caratteristica si traduce nella possibilità di scrittura nel parametro setpos anche con posizionamenti in corso.
Il cambio della quota viene accettato solamente se la nuova posizione é raggiungibile con la direzione in uso. Nel caso di utilizzo di rampe epicicloidali il cambio quota non viene acettato se st_dec = 1
Durante il posizionamento é possibile anche modificare il valore del conteggio posit. Questa funzione è utilizzata solitamente quando un device deve, in particolari condizioni, continuare un profilo di velocità per un tempo molto lungo, superiore al tempo che lasse impiega per raggiungere la quota limite (maxpos o minpos).
Durante il posizionamento é possibile variare la velocitá dellasse senza influenzare la posizione da raggiungere. Questa operazione può determinare un aumento o una diminuzione della velocitá, anche più punti dello stesso posizionamento. Questa operazione viene eseguita con nuova scrittura nel parametro setvel.Il cambio di velocità è sempre disponibile tranne durante la rampa di decelerazione segnalata da un apposito stato (st_dec = 1)
Durante il posizionamento può essere variati anche i tempi d'accelerazione/decelerazione. Per esempio il device può avviare
un posizionamento con una rampa molto lunga e, una volta raggiunta la velocità impostata, è variato il parametro
tacc ed eseguito un cambio di velocità con una rampa molto lunga.
Per applicazioni particolari e alla presenza di rampe trapezoidali, il tempo di rampa può essere variato anche durante una
variazione di velocità, in questo caso il nuovo tempo è messo in esecuzione immediatamente.
La modifica del valore di risoluzione (cntratio) o la scrittura della variabile posit, provoca lazzeramento dei resti della conversione.
Il device visualizza sempre la posizione assoluta dellasse; per eseguire posizionamenti incrementali è necessario disporre
di uno strumento per sottrarre o sommare un determinato valore al conteggio (posit) senza introdurre errori. Il cambio
di conteggio può essere eseguito anche con una scrittura diretta nel nuovo valore nel parametro posit.
Volendo sottrarre 100 unità di misura al conteggio è possibile:
Asse:posit = Asse:posit - 100
Questa operazione introduce un errore perché impone la posizione posit = -100, quando lasse poteva avere una posizione
intermedia tra una unità di misura e la successiva (es. 100.3). Questa frazione (0.3) viene persa ed il ripetersi di
queste operazioni provocano laccumularsi di un errore non trascurabile.
Il comando DELCNT somma al conteggio una quantità pari al parametro delta senza perdere la parte frazionaria della
posizione:
Asse:delta = -100
DELCNT Asse
Il comando di DELCNT può essere inviato solamente con asse fermo (st_still=1)
La lettura della posizione dellasse risulta essere di 2 unità e si trova nel punto A. Si vuole sommare al conteggio posit tre
unità di misura.
Con le istruzioni:
Asse:posit = Asse:posit + 2
lasse assume la nuova posizione B.
Con le istruzioni:
Asse:delta = 2
DELCNT Asse
viene raggiunta la posizione C.
Si noti che con le prime istruzioni lasse ha compiuto un delta inferiore a 3 unità e quindi è stato introdotto un errore.
Se si devono inviare comandi DELCNT in successione, è conveniente calcolare la grandezza da sommare ed inviare una
sola volta il comando; in caso contrario prestare attenzione a non inviare comandi successivi senza interporre una istruzione
di lettura su parametro device.
Asse:delta = 3
DELCNT Asse
WAIT Asse:st_init
Asse:delta = 40
DELCNT Asse
La presenza di un errore nel device è segnalato dallo stato st_error.
Quando st_error è uguale a 1, troviamo presente sulla variabile errcode il tipo di errore intervenuto (vedi tabella) e nella
variabile errvalue una indicazione sulla causa dellerrore.
Se il device va in errore, per riprendere la lavorazione bisogna cancellare lo stato st_error attraverso il comando RSERR.
La presenza di un warning nel sistema camming viene segnalato dallo stato st_warning.
Essendo causato da un evento non grave ed essendo garantita in questa situazione la gestione dellasse, lasse continua
il suo lavoro.
Quando st_warning è uguale a 1, troviamo presente sulla variabile wrncode il tipo di warning intervenuto (vedi tabella)
e nella variabile wrnvalue una indicazione sulla causa che ha provocato il warning.
| Codice | Priorità | Descrizione |
|---|---|---|
| 1 | 0 | Comando non eseguito |
Per cancellare lo stato st_warning bisogna inviare il comando RSWRN.
Il nome del parametro, stato o comando viene riportato alla sinistra della tabella.
R
Indica se il relativo parametro o stato è ritentivo (al momento dellinizializzazione del device mantiene lo stato precedentementedefinito), oppure lo stato che assume al momento dellinizializzazione del device.
Se il device non necessita di inizializzazione il campo R indica il valore che il parametro o stato assume allaccensione della scheda.
R = Ritentivo
0 = Al momento dellinizializzazione del device il valore viene forzato a zero.
1 = Al momento dellinizializzazione del device il valore viene forzato a uno.
- = Al momento dellinizializzazione del device viene presentato il valore significativo.
D
Indica la dimensione del parametro.
F = Flag
B = Byte
W = Word
L = Long
S = Single Float
Vengono descritte tutte le condizioni necessarie affinché il parametro sia considerato corretto o perché il comando venga
accettato.
In alcuni casi vengono specificati dei valori limite per laccettazione del parametro: se vengono introdotti dei valori esterni
ai limiti impostati, il dato viene comunque accettato; pertanto devono essere previsti opportuni controlli dellapplicativo tali
da garantire il corretto funzionamento.
Per lesecuzione di un comando, tutte le relative condizioni devono necessariamente essere soddisfatte; in caso contrario
il comando non viene eseguito.
A
Indica la modalità di accesso.
R = Read (lettura).
W = Write (scrittura).
RW = Read / Write.
I comandi a disposizione per gestire il device sono elencati sotto in ordine di priorità decrescente. Il device esegue tutti i comandi ricevuti entro lo stesso tempo di campionamento iniziando da quello con la priorità maggiore. Per esempio se il device riceve nello stesso tempo di campionamento i comandi CNTUNLOCK e CNTLOCK, per primo esegue il comando CNTLOCK e poi quello di CNTUNLOCK lasciando perciò il contatore libero di contare.
| Nome | Condizioni | Descrizione |
| INIT | st_init = 0 | Initialization Comando di inizializzazione device. Se il device non è inizializzato non vengono eseguiti i calcoli relativi all'asse e quindi rimane inattivo. All'accensione è possibile scaricare tutti i parametri in memoria;successivamente, con comando INIT l'asse sarà inizialiazzato, eseguendo i calcoli una sola volta. Attiva lo stato st_init. |
| EMRG | st_init = 1 | Emergency Pone in emergenza l'asse interrompendo, senza rampa di decelerazione, l'eventuale posizionamento in corso. E' inoltre disabilitata la reazione di spazio dell'asse. |
| RESUME | st_init = 1 st_emrg = 1 | Resume Ripristino della condizione di emergenza dell'asse; viene riabilitata la reazione di spazio se disabilitata. All'acquisizione dello start, l'asse riprende il posizionamento. |
| START | st_init = 1 st_regoff = 0 st_emrg = 0 st_still = 1 | Start Comanda il posizionamento alla quota setpos e velocità setvel. |
| STOP | st_init = 1 st_regoff = 0 st_emrg = 0 st_still = 0 | Stop Interrompe l'eventuale posizionamento in corso dell'asse. La fermata dell'asse avviene seguendo la rampa di decelerazione in uso. L'asse rimane in reazione di spazio. |
| LOOPON | st_init = 1 | Loop ON Abilita la reazione di spazio asse. L'uscita analogica contrasta ogni azione esterna che tenti di spostare l'asse dalla posizione raggiunta (deriva, operatore, …). Queta operazione azzera l'eventuale errore di inseguimento follerr. |
| LOOPOFF | st_init = 1 | Loop OFF Disabilita la reazione di spazio asse. L'asse può essere spostato dalla sua posizione senza che l'uscita analogica contrasti il movimento. |
| CNTLOCK | st_init = 1 | Counter lock Blocca l'acquisizione del conteggio asse anche se il trasduttore continua ad inviare i segnali. In questa fase l'eventuale spostamento dell'asse non viene rilevato. Disabilita il caricamento della quota di preset sul conteggio. Attiva lo stato st_cntlock |
| CNTUNLOCK | st_init = 1 | Counter unlock Sblocca il conteggio dell'asse. Viene ripresa la lettura dei segnali inviati dal trasduttore e l'aggiornamento del conteggio. Disattiva lo stato st_cntlock. |
| CNTREV | st_init = 1 | Counter reverse Consente di invertire le fasi del trasduttore all'interno della scheda. Viene quindi invertito il senso del conteggio (incremento/decremento). Attiva lo stato st_cntrev. |
| CNTDIR | st_init = 1 | Counter direct Il conteggio dell'asse non viene invertito. Disattiva lo stato st_cntrev. |
| PRESET | st_init = 1 st_regoff = 0 st_emrg = 0 st_cal = 0 | Preset Start ricerca preset asse. Viene dato inizio alla procedura di ricerca di preset con le modalità impostate con i parametri prsmode e prsdir. Se la ricerca di preset è già in esecuzione, il comando esegue l'inversione del senso di ricerca. Attiva lo stato st_prson e disattiva lo stato st_prsok. |
| CALON | st_init = 1 | Calibration ON L'uscita analogica viene impiegata come generatore di tensione; in questo caso non è possibile usarla per posizionare l'asse. Il valore in uscita è settabile a piacere tramite la variabile vout. |
| CALOFF | st_init = 1 st_cal = 1 | Calibration OFF L'uscita analogica non viene gestita come generatore di tensione, pertanto può essere nuovamente usata per la gestione dei posizionamenti. |
| MANFW | st_init = 1 st_regoff = 0 st_prson = 0 st_still = 1 st_cal = 0 | Manual forward Comanda il posizionamento manuale in avanti (verso maxpos) alla velocitá impostata. Se il conteggio è maggiore di maxpos, l'asse non si sposterà |
| MANBW | st_init = 1 st_regoff = 0 st_prson = 0 st_still = 1 st_cal = 0 | Manual backward Comanda il posizionamento manuale in indietro (verso minpos) alla velocitá impostata. Se il conteggio è minore di minpos, l'asse non si sposterà |
| REGOFF | st_init = 1 st_still = 1 | Regulation OFF Disabilita la regolazione e l'aggiornamento del DAC, nonché tutti i comandi di movimento |
| REGON | st_init = 1 st_regoff = 1 | Regulation ON Riabilita la regolazione e l'aggiornamento del DAC, nonché tutti i comandi di movimento. |
| DELCNT | st_init = 1 st_cal = 0 st_prson = 0 | Delta counter Il conteggio (posizione dell'asse) viene modificato sommandogli algebricamente il valore specificato nella variabile delta. Questo comando può essere dato sempre, tranne se con l'asse in movimento il comando farebbe invertire la direzione. Nel caso di utilizzo di rampe di decelerazione epicicloidali non è possibile dare il comando se st_dec = 1 |
| RSERR | - | Reset error Azzera lo stato st_error. |
| RSWRN | - | Reset warning Azzera lo stato st_warning |
| RSPRSOK | - | Reset preset OK Azzera lo stato st_prsok |
| Nome | D | R | A | Condizioni | Descrizione |
| measure | L | R | R-W | - | Measure (1÷999999) Indica lo spazio, in unità di misura, percorso dall'asse per ottenere gli impulsi encoder * 4 impostati nel parametro pulse. Questo parametro è utilizzato per il calcolo della risoluzione dell'asse con la formula: Risoluzione = measure* 4 / pulse La risoluzione deve avere un valore compreso tra 0.00374 e 4.00000 |
| pulse | L | R | R-W | - | Pulse encoder (1÷999999) Indica gli impulsi moltiplicato 4 forniti dall'encoder per ottenere lo spazio impostato nel parametro measure. Questo parametro è utilizzato per il calcolo della risoluzione dell'asse con la formula: Risoluzione = measure* 4 / pulse La risoluzione deve avere un valore compreso tra 0.00374 e 4.00000 st_camex = 0 st_prson = 0 |
| maxpos | L | R | R-W | st_still = 1 | Maximum position (-999999 ÷ 999999) Definisce la massima quota raggiungibile dall'asse; il valore impostato è da considerarsi anche come limite massimo per l'introduzione delle quote di lavoro. Valore espresso in unità di misura (Um). |
| minpos | L | R | R-W | st_still = 1 | Minimum position (-999999 ÷ 999999) Definisce la minima quota raggiungibile dall'asse; il valore impostato è da considerarsi anche come limite minimo per l'introduzione delle quote di lavoro. Valore espresso in unità di misura (Um). |
| prspos | L | R | R-W | st_still = 1 st_prson = 0 | Preset position (minpos÷maxpos) Definisce il valore che viene caricato sul conteggio con la procedura di ricerca di preset. |
| maxvel | L | R | R-W | st_still = 1 | Maximum velocity (0 ÷ 999999) Definisce la massima velocità dell'asse (relativa al riferimento analogico di +/-10V). Il valore introdotto è nell'unità di tempo della velocità impostata Velocity unit. Valore espresso in Um/s o Um/min. |
| prsvel | L | R | R-W | st_still = 1 st_prson = 0 | Preset velocity (0 ÷ maxvel) Definisce la velocità dell'asse durante la procedura di ricerca di preset. Il valore introdotto è nell'unità di tempo della velocità impostata (Velocity unit). |
| sprsvel | L | R | R-W | st_still = 1 st_prson = 0 | Preset search velocity Nella procedura di ricerca di preset, definisce la velocità dell'asse nella fase di acquisizione dell'impulso di zero. Il valore introdotto è nell'unità di tempo della velocità impostata (Velocity unit). |
| toll | L | R | R-W | - | Tolerance (-999999 ÷ 999999) Definisce una fascia di conteggio intorno alle quote di posizionamento. Se il posizionamento si conclude entro tale fascia, è da considerarsi corretto. Valore espresso in unità di misura (Um). |
| maxfollerr | L | R | R-W | - | Maximum following error (0 ÷ 2147483648) Definisce il massimo scostamento accettabile tra la posizione teorica e la posizione reale dell'asse. E' utilizzato per la gestione di st_foller. Valore espresso in bit trasduttore. |
| rampmode | B | R | R-W | se st_still = 1 scrittura sempre abilita, se st_still = 0 il nuovo valore viene memorizzato ma processato solamente se i nuovi tempi di acc.e dec. permettono di raggiungere la quota impostata. | Acceleration/deceleration time mode Utilizzato per la scelta tra rampe l'accelerazione e decelerazione uguali o differenziate. Valori ammessi: 0 = rampe uguali, 1 = rampe differenziate. |
| ramptype | B | R | R-W | st_still = 1 | Ramp type Definisce il tipo di rampa da eseguire: 0 = Accelerazione e decelerazione di tipo trapezoidale, 1 = Accelerazione e decelerazione di tipo epicicloidale, 2 = Accelerazione di tipo trapezoidale e decelerazione di tipo epicicloidale, 3 = Accelerazione di tipo epicicloidale e decelerazione di tipo trapezoidale. |
| taccdec | W | R | R-W | se st_still = 1 scrittura sempre abilita, se st_still = 0 il nuovo valore viene memorizzato ma processato solamente se il nuovo tempo permette di raggiungere la quota impostata. | Acceleration/deceleration time (da 0 a 999) É il tempo necessario per passare da velocità 0 a velocità massima e viceversa; il parametro è utilizzato se rampmode = 0. Valore espresso in centesimi di secondo. |
| tacc | W | R | R-W | se st_still = 1 scrittura sempre abilita, se st_still = 0 il nuovo valore viene memorizzato ma processato solamente se il nuovo tempo permette di raggiungere la quota impostata. | Acceleration time (da 0 a 999) Definisce il tempo necessario all'asse per accelerare da zero (condizione di asse fermo) alla velocità massima. Valore espresso in centesimi di secondo. |
| tdec | W | R | R-W | se st_still = 1 scrittura sempre abilita, se st_still = 0 il nuovo valore viene memorizzato ma processato solamente se il nuovo tempo permette di raggiungere la quota impostata. | Deceleration time (da 0 a 999) Definisce il tempo necessario all'asse per decelerare dalla velocità massima a zero (condizione di asse fermo). Valore espresso in centesimi di secondo. |
| rtype | B | R | R-W | ramptype=1 | Reduction type Tipo di riduzione del profilo nel caso in cui lo spazio da percorrere non permetta di eseguire completamente le rampe di accelerazione e decelerazione. 0= Tempo delle rampe fisso con riduzione della pendenza, 1= Pendenza fissa con riduzione del tempo delle rampe. |
| Stopt | B | R | R-W | ramptype=1 | Stop type Tipo di stop durante le rampe di accelerazione 0 = La rampa di accelerazione viene conclusa e quindi si inizia la rampa di decelerazione, 1= La rampa di accelerazione viene interrotta ed inizia subito la rampa di decelerazione di tipo epicicloidale. |
| tinv | W | R | R-W | - | Direction inversion delay (da 0 a 999) Viene utilizzato per evitare stress meccanici dovuti a troppo rapide inversioni del senso di movimento. Valore espresso in centesimi di secondo. |
| toldly | W | R | R-W | - | Tolerance delay (da 0 a 999) Definisce il tempo che intercorre tra l'arrivo dell'asse nella fascia di tolleranza e la relativa segnalazione di stato. Valore espresso in centesimi di secondo. |
| pgain | W | R | R-W | - | Proportional gain (da 0 a 32767) Impostando il valore 1000, il coefficiente è 1.000. È il coefficiente che moltiplicato per l'errore di inseguimento genera la parte proporzionale dell'uscita di regolazione. |
| feedfw | W | R | R-W | - | Feed forward (da 0 a 32767) Impostando il valore 1000, la percentuale è del 100%. È il coefficiente percentuale che, moltiplicato per la velocità, genera la parte feed-forward dell'uscita di regolazione. |
| integt | W | R | R-W | - | Integral time (da 0 a 32767) È il tempo, espresso in millisecondi, che produce il coefficiente d'integrazione dell'errore di inseguimento. L'integrazione di tale errore moltiplicata per tale coefficiente genera la parte integrale dell'uscita di regolazione. |
| derivt | W | R | R-W | - | Derivative time (da 0 a 32767) È il tempo, espresso in millisecondi, che produce il coefficiente derivativo dell'errore di inseguimento. La derivazione di tal errore moltiplicata per tale coefficiente genera la parte derivativa dell'uscita di regolazione. |
| prsmode | W | R | R-W | st_prson = 0 | Preset mode Definisce il tipo di ricerca di preset: 0= Per la ricerca dell'abilitazione impulso di zero, l'asse inizia il movimento in veloce, incontra la camma di abilitazione, inverte la direzione rallentando e, sul fronte di discesa relativo al segnale di camma, carica la quota di preset. 1= Per la ricerca dell'abilitazione impulso di zero, l'asse inizia il movimento in veloce, incontra la camma di abilitazione, inverte la direzione ed in lento acquisisce il primo impulso di zero (dopo la disattivazione del segnale di camma), 2= Non viene attivata la procedura di ricerca preset con movimentazione dell'asse. Il conteggio viene aggiornato alla quota di preset all'attivazione dell'abilitazione impulso di zero. |
| prsdir | B | R | R-W | st_prson = 0 | Preset direction Definisce la direzione del movimento asse per la ricerca della camma di abilitazione impulso di zero. 0 = l'asse si dirige in avanti, 1 = l'asse si dirige indietro. |
| unitvel | B | R | R-W | st_still = 1 | Velocityc unit Definisce se l'unità di tempo della velocità è espressa in minuti o secondi. 0 = Um/min, 1 = Um/sec. |
| decpt | B | R | R-W | st_still = 1 | Decimal point (0 ÷ 3) Definisce la precisione con la quale si intendono impostare le preselezioni e visualizzare i conteggi relativamente all'asse. |
| offset | W | R | R-W | - | Offset (-32768 ÷ 32767) Offset uscita DAC in bit. Definisce il valore in bit della correzione relativa all'uscita analogica in modo da compensare l'eventuale deriva del sistema. Valore espresso in bit DAC. |
| setpos | L | R | R-W | Se st_still = 0, vedi condizioni nel paragrafo “Funzioni speciali - cambio quote e conteggi in movimento” | Setted position (minpos ÷ maxpos) Definisce la quota di posizionamento raggiungibile dall'asse alla velocità setvel. N.B. Il valore è alterato se si comanda una procedura di ricerca preset con prsmode = 0 o 1. |
| setvel | L | R | R-W | Se st_still = 0, vedi condizioni nel paragrafo “Funzioni speciali - cambio velocità tempo di rampa in movimento” | Setted velocity (0 ÷ maxvel) É il valore della velocità di posizionamento. Valore espresso in Um/s o Um/min. N.B. Il valore viene alterato se si comanda una procedura di ricerca preset con prsmode = 0 o 1. |
| vout | B | 0 | R-W | st_cal = 1 | Volt out (-100 ÷ 100) É il valore della tensione d'uscita, espressa in decimi di volts, da usare nella procedura di calibrazione. |
| vel | L | 0 | R-W | - | Velocity É il valore della velocità istantanea dell'asse. L'aggiornamento viene eseguito ogni 250 millisecondi. Valore espresso in Um/s o Um/min. |
| frq | L | 0 | R-W | - | Frequency É il valore della frequenza istantanea dell'asse. L'aggiornamento è eseguito ogni 250 millisecondi. Valore espresso in Hz. |
| posit | L | R | R-W | Se st_still = 0, vedi condizioni nel paragrafo dedicato | Actual position É il valore della posizione istantanea dell'asse. Valore espresso in unità di misura (Um). |
| encoder | L | R | R | - | Encoder É il valore della posizione istantanea dell'asse. Valore espresso in bit encoder * 4. |
| follerr | L | 0 | R | - | Following error É il valore istantaneo dell'errore d'inseguimento. Valore espresso in bit trasduttore. |
| ffwdreg | L | 0 | R | - | Feed-forward register È il valore istantaneo del registro di feed-forward espresso in bit. |
| propreg | L | 0 | R | - | Proportional register È il valore istantaneo del registro proporzionale espresso in bit. |
| intreg | L | 0 | R | - | Integral register È il valore istantaneo del registro integrale espresso in bit. |
| derreg | L | 0 | R | - | Derivative register È il valore istantaneo del registro derivativo espresso in bit. |
| delta | L | 0 | R-W | - | Delta counter (-999999 ÷ 999999) È il valore che è sommato al conteggio quando viene inviato un comando DELCNT. Valore espresso in unità di misura (Um). |
| errcode | B | 0 | R | - | Error code (0 ÷ 100) Indica il tipo d'errore intervenuto nel sistema. Il codice è valido solo se st_error = 1 (Vedi capitolo dedicato). |
| errvalue | B | 0 | R | - | Error value (0 ÷ 100) Indica la causa dell'errore intervenuto nel sistema. Il codice è valido solo se st_error = 1 (Vedi capitolo dedicato) |
| wrncode | B | 0 | R | - | Warning code (0 ÷ 100) Indica il tipo di warning intervenuto nel sistema. Il codice è valido solo se st_warning = 1 (Vedi capitolo dedicato) |
| wrnvalue | B | 0 | R | - | Warning value (0 ÷ 100) Indica la causa del warning intervenuto nel sistema. Il codice è valido solo se st_warning = 1 (Vedi capitolo dedicato) |
| Nome | D | R | A | Condizioni | Descrizione |
| st_init | F | 0 | R | - | Initialization Segnalazione di device inizializzato. 0 = device non inizializzato, 1 = device inizializzato. All'accensione per default viene caricato il valore zero. |
| st_emrg | F | 0 | R | - | Emergency Segnalazione d'asse in emergenza. 0 = asse non in emergenza, 1 = asse in emergenza. |
| st_toll | F | 0 | R | - | Tolerance Segnalazione d'asse in tolleranza rispetto alla quota posta in esecuzione dal comando di START. La segnalazione d'asse in tolleranza può essere ritardata tramite il parametro toldly. 0 = asse non in tolleranza, 1 = asse in tolleranza. All'accensione per default viene caricato il valore zero. |
| st_prsok | F | 0 | R | - | Preset Ok Segnalazione di ricerca di preset conclusa correttamente. 0 = preset non effettuato o non concluso correttamente, 1 = preset effettuato e concluso correttamente. All'accensione per default viene caricato il valore zero. |
| st_still | F | 0 | R | - | Still Segnalazione d'asse fermo. 0 = asse in movimento, 1 = asse fermo. All'accensione per default viene caricato il valore 1. |
| st_prson | F | 0 | R | - | Preset ON Segnalazione di ricerca di preset asse in corso. 0 = ricerca di preset non in corso, 1 = ricerca di prest in corso. All'accensione per default viene caricato il valore zero. |
| st_movdir | F | 0 | R | - | Movement direction Segnalazione della direzione del movimento. 0 = avanti, 1 = indietro. All'accensione per default viene caricato il valore zero. |
| st_loopon | F | 0 | R | - | Loop ON Segnalazione d'asse in reazione di spazio. 0 = asse non in reazione di spazio, 1 = asse in reazione di spazio. All'accensione per default viene caricato il valore zero. |
| st_foller | F | 0 | R | - | Following error Segnalazione d'asse in errore d'inseguimento (ritenuta 500 ms). 0 = asse non in errore d'inseguimento, 1 = asse in errore d'inseguimento. All'accensione per default viene caricato il valore 1. |
| st_regoff | F | 0 | R | - | Regulation Segnala che la regolazione é disabilitata e che l'aggiornamento del DAC non viene effettuato. |
| st_cal | F | 0 | R | - | Calibration Segnalazione di device come generatore di tensione. 0=generatore di tensione asse disattivo, 1=generatore di tensione asse attivo. All'accensione per default viene caricato il valore zero. |
| st_cntlock | F | 0 | R | - | Counter locked Segnalazione d'asse sbloccato. 0=conteggio asse sbloccato, 1=conteggio asse bloccato. |
| st_cntrev | F | 0 | R | - | Counter reversed Segnalazione di conteggio asse invertito. 0=Conteggio asse non invertito, 1=Conteggio asse invertito. All'accensione viene mantenuto lo stato presente allo spegnimento. |
| st_acc | F | 0 | R | - | Acceleration Segnalazione d'asse in fase di accelerazione. 0=asse non in accelerazione, 1=asse in accelerazione. All'accensione per default viene caricato il valore zero. |
| st_dec | F | 0 | R | - | Deceleration Segnalazione d'asse in fase di decelerazione. 0=asse non in decelerazione, 1=asse in decelerazione. All'accensione per default viene caricato il valore zero. |
| st_vconst | F | 0 | R | - | Costant speed Segnalazione d'asse in fase di velocità costante. 0 =asse non in velocità costante, 1 =asse in velocità costante. All'accensione per default viene caricato il valore zero. |
| st_error | F | 0 | R | - | Status of device error Indica lo stato d'errore nel device. Per la decodifica dell'errore si deve fare riferimento alla variabile errcode ed errvalue. 0 = Errore non presente, 1 = Errore presente. All'accensione per default è posto a zero. |
| st_warning | F | 0 | R | - | Status of device warning Indica lo stato di warning nel device. Per la decodifica del warning si deve fare riferimento alla variabile wrncode e wrnvalue. 0 = Warning non presente, 1 = Warning presente. All'accensione per default è posto a zero. |
| st_int | F | 0 | R | - | Status of interrupt line Indica lo stato della linea d'interrupt. 0 = Ingresso in interrupt disattivo, 1 = Ingresso in interrupt attivo. All'accensione per default è posto a zero. |
Nessuna limitazione.
;*************************************************************************************
; Nome Modulo: Ex_Eanpos.CNF Progetto: Ex_EANPOS
; Autore: QEM srl Data: 01/05/99
; Sistema: QMove1 / QCL3 Libreria: 1LIB4001
; Funzionalità: Esempio gestione EANPOS Release: 0
;------------------------------------- Note ------------------------------------------
; [1] - Applicativo d'esempio per utilizzo device EANPOS
**************************************************************************************
;-------------------------------------------------------------------------------------
; Definizione Costanti
;-------------------------------------------------------------------------------------
CONST
;-------------------------------------------------------------------------------------
; Definizione Variabili SYSTEM
;-------------------------------------------------------------------------------------
SYSTEM
slQuotaPos L ;Variabile per quota di posizionamento
slVelAsse L ;Variabile per velocità asse
;-------------------------------------------------------------------------------------;
Definizione Variabili GLOBAL
;-------------------------------------------------------------------------------------
GLOBAL
gfMovMan F ;Flag segnalazione movimenti
;manuali in corso
gfMovAuto F ;Flag segnalazione movimenti
;automatici in corso
;-------------------------------------------------------------------------------------
; Definizione Variabili TIMER
;-------------------------------------------------------------------------------------
TIMER
;-------------------------------------------------------------------------------------
; Definizione DATAGROUP
;-------------------------------------------------------------------------------------
;DATAGROUP
;------------------------------------------------------------------------------------- ;
Configurazione Bus
;-------------------------------------------------------------------------------------
BUS
1 1CPUD 01
2 1MIXA 00
3 .
4 .
;-------------------------------------------------------------------------------------
; Definizione Variabili INPUT
;-------------------------------------------------------------------------------------
INPUT
ifAvMan F 2.INP01 ;Ingresso di avanti manuale
ifInMan F 2.INP02 ;Ingresso di indietro manuale
ifStart F 2.INP03 ;Ingresso di START asse
ifStop F 2.INP04 ;Ingresso di STOP asse
;-------------------------------------------------------------------------------------
; Definizione Variabili OUTPUT
;-------------------------------------------------------------------------------------
OUTPUT
ofToll F 2.OUT01 ;Uscita di asse in tolleranza
ofAxeFermo F 2.OUT02 ;Uscita di asse fermo
;-------------------------------------------------------------------------------------
; Dichiarazione device interni
;-------------------------------------------------------------------------------------
INTDEVICE
;Nome Tipo TCamp Contatore Inter AbilZero OutAnal
Asse EANPOS 0004 2.CNT01 1 2.INP01 2.AN01
END
;*************************************************************************************
; Nome File : TASK_00.MOD
; Progetto : EX_EANPOS
; Descrizione: Gestione Posizionamento
;*************************************************************************************
;-------------------------------------------------------------------------------------
; Operazioni di Inizializzazione Asse
;-------------------------------------------------------------------------------------
Asse:measure = 10000 ;Spazio in 1 giro encoder(Um)
Asse:pulse = 40000 ;impulsi giro encoder
Asse:maxvel = 100000 ;Velocita` max. = Velocità Asse con
;uscita analogica a 10V (CALON/vout=100)
Asse:maxpos = 999999 ;Quota massima
Asse:minpos = -999999 ;Quota minima
Asse:maxfollerr = 10000 ;Errore di inseguimento
Asse:unitvel = 0 ;Unita di tempo della velocità
Asse:decpt = 0 ;Cifre decimali
Asse:rampmode = 0 ;Tipo di rampe utilizzate
Asse:taccdec = 100 ;Tempo di accelerazione e di decelerazione
Asse:tacc = 0 ;Tempo di accelerazione (non utilizzato)
Asse:tdec = 0 ;Tempo di decelerazione (non utilizzato)
Asse:tinv = 0 ;Tempo di inversione asse
Asse:toll = 5 ;Tolleranza
Asse:toldly = 10 ;Tempo di ritardo attivaz. tolleranza
Asse:prsmode = 0 ;Tipo di ricerca di preset
Asse:prspos = 0 ;Quota di preset
Asse:prsdir = 0 ;Direzione della ricerca di preset
Asse:prsvel = (20 * Asse:maxvel)/100 ;Velocità di preset (20% della vel.max.)
Asse:sprsvel = (10 * Asse:maxvel)/100 ;Velocità di ricerca impulso di
;zero (10% della vel.max.)
Asse:offset = 0 ;Tensione di offset
Asse:pgain = 10 ;Guadagno proporzionale
Asse:feedfw = 1000 ;Feedforward
Asse:integt = 0 ;Tempo di integrale
Asse:derivt = 0 ;Tempo derivativo
INIT Asse ;Inizializza il device
WAIT Asse:st_init ;Attendi che il device sia inizializzato
CNTUNLOCK Asse ;Sblocca conteggio
WAIT NOT Asse:st_cntlock ;Attendi che il conteggio sia sbloccato
CNTDIR Asse ;Imposta il senso del conteggio
WAIT NOT Asse:st_cntrev ;Attendi che sia impostato il senso
;del conteggio
REGON Asse ;Abilita la regolazione
WAIT NOT Asse:st_regoff ;Attendi l'abilitazione alla regolazione RESUME Asse
;Togli l'asse dallo stato di emergenza
WAIT NOT Asse:st_emrg ;Attendi che l'asse non sia in emergenza
LOOPON Asse ;Aggancia loop di reazione dell'asse
WAIT Asse:st_loopon ;Attendi che sia agganciato il loop di
;reazione dell'asse
IF (slVelAsse EQ 0) ;Nel caso in cui il set di velocità
;dell'asse sia zero
slVelAsse = 50 ;Imposta una velocità di posizionamento
ENDIF
IF (slQuotaPos EQ 0) ;Nel caso in cui la quota di
;posizionamento dell'asse sia zero
slQuotaPos = 2000 ;Imposta una quota di posizionamento
ENDIF
;-------------------------------------------------------------------------------------
; Operazioni di Posizionamento
;-------------------------------------------------------------------------------------
; ------------------------------- variabili utilizzate ------------------------------
; slVelAsse: Variabile impostabile che rappresenta la velocità dell'asse
; (espressa in % della vel.max.)
; slQuotaPos: Variabile impostabile che rappresenta la quota di posizionamento dell'asse
; ---------------------------------- flag utilizzati --------------------------------
; gfMovMan: movimento manuale in corso
; gfMovAuto: Movimento automatico in corso
;-------------------------------------------------------------------------------------
MAIN:
;-------------------------------------------------------------------------------------
; Gestione uscite
;-------------------------------------------------------------------------------------
ofToll = Asse:st_toll ;Imposto l'uscita di tolleranza come
;lo stato di tolleranza
ofAxeFermo = Asse:st_still ;Imposto l'uscita di asse fermo come
;lo stato di asse fermo
;-------------------------------------------------------------------------------------
; Gestione movimenti automatici
;-------------------------------------------------------------------------------------
IF ifStart ;Attende l'ingresso di START
IF NOT gfMovMan ;Controlla che non ci siano movimenti manuali
IF Asse:st_still ;Controlla che l'asse sia fermo
Asse:setvel=(slVelAsse*Asse:maxvel)/100 ;Imposta la velocità dell'asse
Asse:setpos = slQuotaPos ;Imposta la quota di posizionamento
START Asse ;Esegue lo start dell'asse
gfMovAuto = 1 ;Segnala movimento automatico in corso
ENDIF
ENDIF
ENDIF
IF ifStop ;Attende l'ingresso di STOP
IF NOT Asse:st_still ;Controlla che l'asse NON sia fermo
STOP Asse ;Esegue lo stop dell'asse
ENDIF
ENDIF
IF gfMovAuto ;Controlla segnalazione movimento
;automatico in corso
IF Asse:st_still ;Controlla che l'asse sia fermo
gfMovAuto = 0 ;Resetta stato di movimento Automatico
ENDIF
ENDIF
;-------------------------------------------------------------------------------------
; Gestione movimenti manuali
;-------------------------------------------------------------------------------------
IF ifAvMan ;Attende l'ingresso di movimento manuale
IF NOT (gfMovAuto OR gfMovMan) ;Controlla che non ci siano movimenti
;automatici o manuali
IF Asse:st_still ;Controlla che l'asse sia fermo
Asse:setvel=(slVelAsse*Asse:maxvel)/100 ;Imposta la velocita` dell'asse
MANFW Asse ;Avanti asse in manuale
gfMovMan = 1 ;Segnala movimento manuale in corso
ENDIF
ENDIF
ENDIF
IF ifInMan ;Attende l'ingresso di movimento manuale
IF NOT (gfMovAuto OR gfMovMan) ;Controlla che non ci siano movimenti
;automatici o manuali
IF Asse:st_still ;Controlla che l'asse sia fermo
Asse:setvel=(slVelAsse*Asse:maxvel)/100 ;Imposta la velocita` dell'asse
MANBW Asse ;Avanti asse in manuale
gfMovMan = 1 ;Segnala movimento manuale in corso
ENDIF
ENDIF
ENDIF
IF gfMovMan ;Se l'asse si muove in manuale
IF NOT (ifAvMan OR ifInMan) ;Se gli ingressi di avanti e indietro
;manuale sono OFF
STOP Asse ;Ferma l'asse
gfMovMan = 0 ;Togli la segnalazione di asse in
;movimento manuale
ENDIF
ENDIF
;-------------------------------------------------------------------------------------
; Operazioni finali
;-------------------------------------------------------------------------------------
WAIT 1
JUMP MAIN
END